热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python爬虫|Python爬虫入门(二):请求

系列专栏目录:第一讲:Python爬虫|Python爬虫入门(一):爬虫基本结构&简单实例第二讲:Python爬虫|Python爬虫入门(二):请求第三讲:Python爬虫|Pyt

系列专栏目录:

第一讲:Python爬虫|Python爬虫入门(一):爬虫基本结构&简单实例

第二讲:Python爬虫|Python爬虫入门(二):请求

第三讲:Python爬虫|Python爬虫入门(三):解析

第四讲:Python爬虫|Python爬虫入门(四):储存

————————萌萌哒的分割线————————

这次我们入门一下爬虫的请求模块。本篇不会深入地讲请求相关的知识,主要关注在爬虫部分的相关知识,点到为止。

一 、HTTP协议

我们在第一篇爬虫教程(
知乎专栏)讲到了HTTP协议这个东西。讲HTTP协议之前,我们要先讲讲我们平时浏览的网页是怎么来的。

最简单的模型是这样的:浏览器(客户端)告诉服务器说,我想请求一个网页。服务器收到消息说,好的给你。然后浏览器(客户端)收到网页,并且渲染解析成我们看到的网页。这个部分就涉及到消息怎么传送。事实上从最底层的物理层到最顶层的应用层是有很多协议的。我们只讨论最上面的应用层。最常用的应用层就是HTTP协议。

所谓HTTP协议,中文名是超文本传输协议。这是一种可靠的可以把各种各样格式的文件在互联网上传输的协议。事实上HTTP协议总共有七步,这次我们先讲一下主要的过程。HTTP协议的传输主要通过HTTP报文实现的:

1. 客户端(比如浏览器) :发送请求报文到服务器

2. 服务器:接收请求报文并处理

3. 服务器:发送响应报文给客户端

4. 客户端:处理接收到的内容。

这就是一个比较粗略的流程。我们先不讨论报文,在后面深入讲解反爬技巧的时候我们再讨论怎么在报文上下功夫。

萌萌哒的浏览器宝宝想发送请求的时候,就必须要知道服务器的名字。比如,我们需要使用bing搜索,我们就需要bing的名字:
微软必应搜索 – 全球搜索,有问必应 (Bing) 。这个名字就是URL。(至于里面详细的过程我们也先跳过。)那么,在发送请求的时候,就需要知道URL。关于URL的语法,我们也先不深入讨论,在后面我们升级单页爬虫的时候再详细说。

另外,客户端请求的方法也是不一样的。比如,打开bing的首页的时候,是什么都不发送的。但是,你登陆知乎的时候,是需要输入账号密码的。所以这就有两种方法:一种是客户端不发送数据,一种是客户端发送数据,然后接收响应报文。前者就是get方法,后者就是post方法。这是HTTP协议最常用的两种方法。(其他方法我们先忽略不计,在实际上的使用中相对比较少。)

那么怎么判断这个过程是不是成功呢?响应报文的状态码会告诉你。大家最熟悉的就是404了。大家先记住开头的一位数字就好:2开头的是正常,3开头的是重定向(定向到另外一个店铺),4开头的是客户端异常,5开头的是服务器异常。

到这里做个小结:HTTP协议是一种在互联网上传输文件的协议,主要过程是客户端发送请求报文、服务器接收并发送响应报文、客户端接收;访问某个服务器资源需要知道它的URL;主要的HTTP请求方法有get(客户端不发数据)和post(客户端发数据)

二、Requests入门

requests的官方主页(
Requests: HTTP for Humans)就写着大大的“HTTP for human beings”. requests也确实做的非常好,它把HTTP协议封装的非常好,非常适合爬虫等各种各样的网络编程使用。(所以赶快放弃urllib、urllib2 for Python2 and urllib for Python3 这些标准库吧~)

这里我们继续使用Python解释器。我们来顺着前面说的讲讲要怎么实现HTTP协议的过程。事实上高度封装的requests都搞定了:

import requests
r1 = requests.get('http://cn.bing.com/search?q=requests') #get方法
post_data={
'stock':'000001',
'searchkey':'',
'category':'category_ndbg_szsh;',
'pageNum':'1',
'pageSize':'',
'column':'szse_main',
'tabName':'fulltext',
'sortName':'',
'sortType':'',
'limit':'',
'seDate':''
}
r2 = requests.post('http://www.cninfo.com.cn/cninfo-new/announcement/query',data=post_data) #post方法

get方法和post方法的使用如上。这里的返回值是一个对象,这个对象包括了各种各样的属性和方法,我们取几个对我们最重要的:

r1.status_code #状态码,正常是200
r1.encoding #文件编码,比如'utf-8'
r1.content #文件全文
r1.json() #把请求回来的json数据转成Python字典并返回

这里特别说明一下,如果需要下载原始文件,比如下面这个例子的PDF文件,那么最好加一个参数:

r3 = requests.get('http://www.cninfo.com.cn/finalpage/2015-03-13/1200694563.PDF',stream = True) #请求
r3.raw.read() #读取文件(最好在括号里面加一下个数,只读前面几个,不然……可以试试看哈哈哈哈)

最后,我们来写一个完整的请求函数,以后我们再在这个基础上不断升级:

def getHTML(url):
r = requests.get(url)
return r.content
if __name__=="__main__":
url = 'https://zhuanlan.zhihu.com/xmucpp'
html = getHTML(url)
print(html)

完整到只有两行?这充分显示了requests库对HTTP协议封装的到位。

当然,还有很多很多没有讲到的。这些后续都会在爬虫教程中慢慢渗透,之后会有更系统的介绍。

如果你想了解更多关于requests的介绍,请戳:

Quickstart – Requests 2.13.0 documentation

或者

知乎专栏

知乎专栏

————————萌萌哒的分割线————————

非商业转载注明作者即可,商业转载请联系作者授权并支付稿费。本专栏已授权“维权骑士”网站(http://rightknights.com)对我在知乎发布文章的版权侵权行为进行追究与维权。

项目联系方式:

  • 项目邮箱(@iGuo 的邮箱):zhangguocpp@163.com
  • 项目网站:http://www.xmucpp.com/(修复中)
  • 项目GitHub:China’s Prices Project at Xiamen Univerisity (CPP@XMU)
  • 项目专栏:China’s Prices Project – 知乎专栏
  • 项目知乎账户:@CPP
  • 项目公众号:xmucpp2016(XMUCPP)

推荐阅读
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 本文总结了淘淘商城项目的功能和架构,并介绍了传统架构中遇到的session共享问题及解决方法。淘淘商城是一个综合性的B2C平台,类似京东商城、天猫商城,会员可以在商城浏览商品、下订单,管理员、运营可以在平台后台管理系统中管理商品、订单、会员等。商城的架构包括后台管理系统、前台系统、会员系统、订单系统、搜索系统和单点登录系统。在传统架构中,可以采用tomcat集群解决并发量高的问题,但由于session共享的限制,集群数量有限。本文探讨了如何解决session共享的问题。 ... [详细]
  • 集成电路企业在进行跨隔离网数据交换时面临着安全性问题,传统的数据交换方式存在安全性堪忧、效率低下等问题。本文以《Ftrans跨网文件安全交换系统》为例,介绍了如何通过丰富的审批流程来满足企业的合规要求,保障数据交换的安全性。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有